package DesignPattern.AbstractFactory;

/**
 * @author : LdLtd
 * @Date : 2023/12/11
 * @Description:
 * 抽象工厂模式提供了一个创建一系列相关或相互依赖的对象接口，
 * 而且无须指定它们的具体类。抽象工厂模式是工厂方法模式的加强版，
 * 抽象工厂模式与工厂方法模式最大的区别在于，
 * 工厂方法模式针对一个产品等级结构，
 * 而抽象工厂模式面对多个产品等级结构，
 * 一个工厂角色可以负责多个不同产品等级结构中的产品对象的创建 。
 *
 * 优点
 *
 * 1、封装性，调用方只需要知道具体工厂就可以创建多个不同产品等级结构中的产品，
 * 外部访问时隐藏了具体产品的创建过程。从而可以实现高内聚低耦合的设计目的。
 *
 * 2、产品族内的约束为非公开状态。比如制造一台小米手机需要三个摄像头，
 * 一台诺基亚手机需要两个摄像头，这样的生产过程对调用工厂类的模块来说是透明的，
 * 上层不需要知道这个约束，能获得一个产品对象就可以，具体的产品族内的约束是在工厂内实现。
 *
 * 缺点
 *
 * 抽象工厂模式的最大缺点就是产品族扩展非常困难，我们以通用代码为例，
 * 如果要增加一个产品C，也就是说产品等级结构由原来的2个增加到3个。
 * 此时，抽象类AbstractFactory要增加一个方法createProductC()，
 * 然后具体工厂实现类都要修改，这严重违反了开闭原则，会带来较大的不便。
 */
public class AbstractMethod {
    public static void main(String[] args) {
        NotEqualAdditionFactory notEqualAdditionFactory=new NotEqualAdditionFactory();
        Compare compare = notEqualAdditionFactory.createCompare();
        Operation operation = notEqualAdditionFactory.createOperation();
        System.out.println(compare.getCompareResult(1,2));
        System.out.println(operation.getResult(1, 2));
    }
}
